home *** CD-ROM | disk | FTP | other *** search
/ ASME's Mechanical Engine…ing Toolkit 1997 December / ASME's Mechanical Engineering Toolkit 1997 December.iso / auto_cad / faceit.lsp < prev    next >
Text File  |  1989-10-14  |  3KB  |  53 lines

  1. ;FACEIT.LSP    Bill Enger
  2. ;1/18/89       Replaces a selected 3D Polygon Mesh entity with a similar 
  3. ;              coating of 3DFACE entites, which have invisible interior edges.
  4. ;              Intended for use on entities generated by "RULESURF", which do 
  5. ;              not allow making their interior edges invisible. User must erase 
  6. ;              the 3D mesh afterwards, or add that capability to the code.
  7.                
  8. (defun c:faceit ()
  9.   (princ "Select a 3D Polygon Mesh: ")           ; generated by "rulesurf"
  10.   (setq PLINE (car (entsel)))
  11.   (command "ucs" "w")                            ; switch to WCS
  12.   (setq ELIST (entget PLINE))
  13.   (while (not (and (eq (cdr (assoc 0 ELIST)) "POLYLINE")   ; "until user 
  14.                    (eq (cdr (assoc 70 ELIST)) 16)))        ;  gets it right"
  15.     (princ "This only works on 3D POLYGON MESH entities. Try again...")
  16.     (setq PLINE (car (entsel)))
  17.     (setq ELIST (entget PLINE)))
  18.   (setq N (getvar "SURFTAB1")       ; get number of edges in N direction
  19.         VL1 ()                      ; empty lists for vertices in
  20.         VL2 ())                     ; N direction
  21.   (setq ENAME (entnext PLINE))      ; first vertex subentity
  22.   (repeat (1+ N)                    ; for all vertices on "side 1"
  23.     (setq ELIST (entget ENAME))
  24.     (setq VL1 (cons (cdr (assoc 10 ELIST)) VL1))   ; put coord list into list 1
  25.     (setq ENAME (entnext ENAME)))                  ; next vertex
  26.   (repeat (1+ N)                    ; for all vertices on "side 2"
  27.     (setq ELIST (entget ENAME))
  28.     (setq VL2 (cons (cdr (assoc 10 ELIST)) VL2))   ; put coord list into list 2
  29.     (setq ENAME (entnext ENAME)))                  ; next vertex
  30.   (while (nth 1 VL1)                    ; while there are two vertices left in
  31.     (cond                                                         ; list 1
  32.       ((equal (nth 0 VL1) (nth 1 VL1))  ; test if it's a triangle with two 
  33.         (setq P1 (nth 0 VL1)              ; vertices on side 1
  34.               P2 (nth 0 VL2)
  35.               P3 (nth 1 VL2))
  36.         (command "3DFACE" "I" P1 P2 "I" P3 "" ""))  ; make a 3 sided 3Dface
  37.       ((equal (nth 0 VL2) (nth 1 VL2))  ; test if it's a triangle with two
  38.         (setq P1 (nth 0 VL2)              ; vertices on side 2
  39.               P2 (nth 0 VL1)
  40.               P3 (nth 1 VL1))
  41.         (command "3DFACE" "I" P1 P2 "I" P3 "" ""))  ; make a 3 sided 3Dface
  42.       (T                                ; it's a quadrilateral
  43.         (setq P1 (nth 0 VL1)
  44.               P2 (nth 1 VL1)
  45.               P3 (nth 0 VL2)
  46.               P4 (nth 1 VL2))
  47.         (command "3DFACE" P1 "I" P2 P4 "I" P3 "")))  ; make a 4 sided 3Dface
  48.     (setq VL1 (cdr VL1))                ; remove the first vertex from list 1
  49.     (setq VL2 (cdr VL2)))               ; and from list 2
  50.   (command "ucs" "p")                   return to previous UCS
  51.   (princ))
  52. 
  53.